package dao

import "strings"

type Page struct {
	PageNo    int64  // 查询第几页 1
	PageSize  int64  // 每页多少条 10
	Offset    int64  // 第多少条开始， (PageNo - 1) * PageSize = 1
	Total     int64  // 总条数
	SortField string // 按什么字段排序
	Sort      string // 排序方式是什么
}

type PageQuery struct {
	Page  Page
	Query interface{} // 查询条件
}

func NewPageQuery() *PageQuery {
	return new(PageQuery)
}

func isContainSort(sort string) bool {
	for _, eachItem := range []string{"desc", "asc"} {
		if eachItem == strings.ToLower(sort) {
			return true
		}
	}
	return false
}

func (pageQuery *PageQuery) Computed() *PageQuery {
	// 0 值处理
	if pageQuery.Page.PageNo == 0 {
		pageQuery.Page.PageNo = 1
	}

	// PageSize 安全范围处理
	if pageQuery.Page.PageSize <= 0 {
		pageQuery.Page.PageSize = 10
	} else if pageQuery.Page.PageSize > 100 {
		pageQuery.Page.PageSize = 100
	}

	// 求偏移开始
	pageQuery.Page.Offset = (pageQuery.Page.PageNo - 1) * pageQuery.Page.PageSize

	// 空 值处理，没有排序字段，就设置一个默认的
	if pageQuery.Page.SortField == "" {
		pageQuery.Page.SortField = "created_at"
	}
	if !isContainSort(pageQuery.Page.Sort) {
		pageQuery.Page.Sort = "desc"
	}

	return pageQuery
}

/*
type PageQuery struct {
	PageNo    int64       // 查询第几页 1
	PageSize  int64       // 每页多少条 10
	Offset    int64       // 第多少条开始， (PageNo - 1) * PageSize = 1
	Total     int64       // 总条数
	SortField string      // 按什么字段排序
	Sort      string      // 排序方式是什么
	Query     interface{} // 查询条件
}

func NewPageQuery() *PageQuery {
	return new(PageQuery)
}

func isContainSort(sort string) bool {
	for _, eachItem := range []string{"desc", "asc"} {
		if eachItem == strings.ToLower(sort) {
			return true
		}
	}
	return false
}

func (pageQuery *PageQuery) Computed() *PageQuery {
	// 0 值处理
	if pageQuery.PageNo == 0 {
		pageQuery.PageNo = 1
	}

	// PageSize 安全范围处理
	if pageQuery.PageSize <= 0 {
		pageQuery.PageSize = 10
	} else if pageQuery.PageSize > 100 {
		pageQuery.PageSize = 100
	}

	// 求偏移开始
	pageQuery.Offset = (pageQuery.PageNo - 1) * pageQuery.PageSize

	// 空 值处理，没有排序字段，就设置一个默认的
	if pageQuery.SortField == "" {
		pageQuery.SortField = "created_at"
	}
	if !isContainSort(pageQuery.Sort) {
		pageQuery.Sort = "desc"
	}

	return pageQuery
}
*/
